﻿using System;
using System.Xml;
using System.Text;
using System.Collections;
using System.ComponentModel;
using System.Collections.Generic;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.UI.Bovespa.Clientes.Model;
using Sinacor.UI.Bovespa.Clientes.Communication;
using Sinacor.UI.Bovespa.Clientes.Communication.Bovespa.Cliente.Cliente;
using Sinacor.UI.Bovespa.Clientes.Model.Enum;

namespace Sinacor.UI.Bovespa.Clientes.Presenter
{
    public class PesquisaClientesPresenter: BasePresenter<IPesquisaClientes>
    {
        private IPesquisaClientes _view;
        private Cliente _comunicacao;
        private PesquisaCliente _model;

        public PesquisaClientesPresenter(IPesquisaClientes view) : base(view)
        {
            this._view = view;
		}

		#region CarregarClientes
        /// <summary>
        /// Alterar para enviar e receber ModelPesquisaCliente - esertorio - 200805132240 - ref issue ID0004794
        /// Impacto para retornar ModelPesquisaCliente é grande entao retornara ClienteResponse - esertorio - 200805132312- ref issue ID0004794
        /// </summary>
        /// <param name="filtro"></param>
		public void CarregarClientes(PesquisaCliente filtro)
        {
            List<ClienteResponse> clientes = null;
            // ClienteResponse

            try
            {
                this._comunicacao = new Cliente(this.Session);
                clientes = _comunicacao.ConsultarClientes(filtro);

                if (clientes != null)
                {
                    if (clientes == null || clientes.Count == 0)
                        this._view.ExibirMensagem(Sinacor.UI.Bovespa.Clientes.Model.Enum.Mensagem.ClienteInesistente);
                    else
                        this._view.ExibirClientes(clientes);
                }
            }
            catch (BusinessException busEx)
            {
                if (busEx.ErrorNumber == 105000)
                    throw new Exception("Bovespa.Clientes.Message.RegistroNaoEncontrado");
                else
                    HandleException(busEx);
            }
            catch (Exception ex)
            {
                    HandleException(ex);
            }
		}
		#endregion

		#region CarregarClientesResumoFinanceiro

		public void CarregarClientesResumoFinanceiro(PesquisaCliente filtro)
		{
			List<ClienteResponse> clientes = null;
			ConsultarClienteRequest request = null;
			try
			{
				    request = new ConsultarClienteRequest();
				    request.Codigo = filtro.Codigo;
				    request.Apelido = filtro.Apelido;
				    request.Nome = filtro.NomeCliente;
                    request.CPFCNPJ = filtro.CpfCnpj;
				    request.CodigoOperacionalCVM = filtro.CodigoOperacionalCVM;

                    this._comunicacao = new Cliente(this.Session);
				    clientes = _comunicacao.ConsultarClientesFinanceiro(request);
				    if (clientes == null || clientes.Count == 0)
					    this._view.ExibirMensagem(Mensagem.ClienteInesistente);
				    else
					    this._view.ExibirClientes(clientes);
                }
            catch (Exception ex)
            {
                if (((BusinessException)(ex)).ErrorNumber == 105000)
                    throw new Exception("Bovespa.Clientes.Message.RegistroNaoEncontrado");
                else
                    HandleException(ex);
            }
		}
		#endregion

		#region Validar Bloqueio Cliente
		public void ValidarEscolhaCliente(object cliente, bool chamarInformacoes)
        {
            ClienteResponse clienteSelecionado = (ClienteResponse) cliente;
            if (chamarInformacoes)
            {
                _model = new PesquisaCliente();
                _model.Apelido = clienteSelecionado.Apelido;
                _model.Codigo = clienteSelecionado.Codigo;
                _model.DigitoVerificador = clienteSelecionado.DigitoVerificador;
                _model.NomeCliente = clienteSelecionado.Nome;
                this._view.AceitarCliente(_model, chamarInformacoes);
            }
            else
            {
                _model = new PesquisaCliente();
                _model.Apelido = clienteSelecionado.Apelido;
                _model.Codigo = clienteSelecionado.Codigo;
                _model.DigitoVerificador = clienteSelecionado.DigitoVerificador;
                _model.NomeCliente = clienteSelecionado.Nome;
                this._view.AceitarCliente(_model, chamarInformacoes);
            }
        }
        #endregion

        #region Validação de entrada do usuário

        public bool ValidaInputsNecessarios(Sinacor.UI.Bovespa.Clientes.Model.PesquisaCliente pModelPesquisaCliente)
        {
            if (!pModelPesquisaCliente.Codigo.HasValue && !pModelPesquisaCliente.CpfCnpj.HasValue && String.IsNullOrEmpty(pModelPesquisaCliente.CodigoOperacionalCVM) && String.IsNullOrEmpty(pModelPesquisaCliente.Apelido) && String.IsNullOrEmpty(pModelPesquisaCliente.NomeCliente))
                return false;
            else
                return true;
        }
        #endregion Validação de entrada do usuário

        #region Cor das linhas do Grid
        public bool ClientBloqueado(ClienteResponse item)
        {
            if (item.Situacao.ToString().ToUpper() == "INATIVO")
                return true;
            else
                return false;
                
        }
        #endregion
    }
}